草庐IT

C++ 对和指针

全部标签

c++ - 使用指向 char 的指针时访问冲突写入位置

我正在编写一个非常简单的程序,用于从字符串中删除重复的字符。我运行它visualstudio并得到错误:Unhandledexceptionat0x00d110d9ininteviews.exe:0xC0000005:Accessviolationwritinglocation0x00d27830.我真的不明白问题是什么。当前单元格获取下一个单元格的值。voidremove(char*str,chara){while(*str!='\0'){if(*(str+1)==a){remove(str+1,a);}*str=*(str+1);//HEREIGETTHEERROR++str;}}

c++ - 指向结构的指针 vector

以下程序对我来说看起来还不错。但我无法编译它。#include#includeusingnamespacestd;intmain(){structa{inti;intj;};std::vectorvecA;a*pA=newa;pA->i=4;pA->j=9;vecA.push_back(pA);return0;}它会产生以下错误。struct_update.cc:Infunction‘intmain()’:struct_update.cc:32:19:error:templateargumentfor‘templateclassstd::allocator’useslocaltype‘

c++ - std::is_const 将 const 指针标识为非常量

我很困惑std::is_const识别const的行为指针为非const.我自己的实现is_const做完全一样的事情。我不确定为什么更通用的模板化结构正在挑选版本。gcc4.7和clang3.1-svn表现出相同的行为。任何人都可以解释发生了什么事吗?代码如下:#include#include#includeclassCEmptyClass{};namespacejbc{templatestructis_const:std::false_type{};templatestructis_const:std::true_type{};}intmain(intargc,char*argv[

c++ - 为什么当 typedef const 指针与 extra const 一起使用时编译器不报错?

以下给出了预期的错误:int*constconstp=newint;//g++error:duplicatecv-qualifier但下面没有给出任何错误,即使它等同于上面的错误:typedefint*constintp_const;intp_constconstp=newint;//ok!//^^^^^duplicate?为什么编译器会忽略额外的const?[注:intp_constconst与constchar*const不同,因为*p=;是可能的。] 最佳答案 在7.1.5[dcl.type](C++03)中,规定在通过typ

c++ - 如何将指针转换为 int

我试图将地址的值存储在非指针int变量中,当我尝试转换它时,我得到编译错误“从‘int*’到‘int’的无效转换”这是我的代码'正在使用:#include#include#includeusingnamespacestd;vectortest;intmain(){int*ip;intpointervalue=50;intthatvalue=1;ip=&pointervalue;thatvalue=ip;cout 最佳答案 int可能不够大,无法存储指针。你应该使用intptr_t。这是一个整数类型,它足够大以容纳任何指针。intpt

c++ - 我应该按值传递字符串还是传递指向它的指针?

我有一个看起来像这样的函数intmyclass::setVersion(std::stringver){if(ver.size()>1){version.swap(ver)return0;}elsereturn-1;}我的问题很简单,是按原样传递ver还是作为字符串指针传递更好?仅供引用,ver是一个小字符串(大约8)。编辑:ver是否更改并不重要。我只想用ver的内容替换version。EDIT2:我正在使用visualstudio2008。 最佳答案 这取决于您希望代码的行为是什么。这里的大多数建议答案都会更改您发布的代码的行为

c++ - 增加指针时删除数组指针c++?

我有:int*ptr=newint[8];delete[]ptr;//itok,allptrisdelete;但如果我有:int*ptr=newint[8];ptr++;delete[]ptr;我的问题:delete[]是删除所有ptr从ptr[0]到ptr[7]还是只是从ptr[1]到ptr[7]?而且,如果它从ptr[1]删除到ptr[7],delete[]怎么知道这次要删除的实际大小? 最佳答案 都没有;这是未定义的行为,通常意味着它会使程序崩溃。您传递给delete[]的指针必须是先前从new[]返回的指针。没有异常(exc

c++ - C++ 引用是否保证使用指针 "internally"?

查看C++中的引用,我注意到我查看的所有实现都在内部使用了一个指针。C++标准是否保证引用将在内部使用指针,或者实现是否可以使用更“高效”的解决方案?(我目前看不出如何“更好”地完成它,因为当创建一个新的堆栈框架时,并没有真正可靠的方法来轻松地知道被引用的变量与堆栈基指针的偏移量是多少,因为堆栈非常有活力)注意:我确实理解C++中指针和引用之间的区别(这个问题与此无关) 最佳答案 如果您的意思是引用需要编译器为指针分配存储空间,那么这是未指定的。§8.3.2/4Itisunspecifiedwhetherornotareferenc

c++ - 指向成员函数的指针 - C++ std::list 排序

如何将指向成员函数的指针传递给std::list.sort()?这可能吗?谢谢structNode{uint32_tID;char*Value;};classmyClass{private:uint32_tmyValueLength;public:listMyQueue;boolcompare(Node*first,Node*second);booldoStuff();}boolmyClass::compare(Node*first,Node*second){unsignedintii=0;while(iiValue[ii]Value[ii]){returntrue;}elseif(f

c++ - 指向 const 的指针与通常的指针(对于函数)

指向const的指针和通常的函数指针之间有什么区别吗?什么时候适合对独立函数使用const限定符?我写了简短的示例来说明我的问题:#includeusingnamespacestd;intsum(intx,inty){returnx+y;}typedefintsum_func(int,int);intmain(){constsum_func*sum_func_cptr=∑//constfunctionsum_func*sum_func_ptr=∑//non-constfunction?//Whatisthedifferencebetweensum_func_cptran